package com.source.sys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.source.sys.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.source.sys.vo.UserShowVo;
import com.source.utils.CommonResult;
import org.springframework.web.multipart.MultipartFile;

import javax.mail.MessagingException;
import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ZZF
 * @since 2021-02-08
 */
public interface UserService extends IService<User> {
    /**
     * 查找用户名是否存在
     * @param loginName
     * @return
     */
    Boolean findUserExist(String loginName);

    /**
     * 检查邮箱是否已经注册
     * @param email
     * @return
     */
    boolean checkEmailExist(String email);

    /**
     * 发送邮箱
     * @param email
     * @param code
     */
    void sendRegisterEmail(String email,String code) throws MessagingException;

    /**
     * 检验验证码是否过期
     * @param emailMap 验证码的map
     * @return true 失效
     *         false 有效
     */
    boolean checkCodeExpire(Map<String,Object> emailMap);

    /**
     * 检验是否为该邮箱
     * @param emailMap
     * @return
     */
    boolean checkReceviceEmail(Map<String,Object> emailMap,String email);

    /**
     * 检验验证码是否正确
     * @param emailMap
     * @param emailCode 验证码
     * @return true 正确
     *         false 错误
     */
    boolean checkCodeCorrect(Map<String,Object> emailMap,String emailCode);

    /**
     * 登录
     * @param loginName 用户名
     * @param password 密码
     * @return
     */
    UserShowVo login(String loginName, String password);

    /**
     * 注册
     * @param loginName 用户名
     * @param password 密码
     * @param email 邮箱
     * @return
     */
    @Deprecated
    boolean register(String loginName,String password,String email);

    /**
     * 注册
     * @param loginName
     * @param password
     * @param email
     * @param codeFile
     * @return
     */
    boolean register(String loginName, String password, String email, MultipartFile codeFile);

    /**
     * 获取User分页信息
     * @param currentPageNo
     * @param size
     * @return
     */
    @Deprecated
    Page<User> getUserPageInfo(int currentPageNo, int size);

    /**
     * 获取User分页信息
     * @param currentPageNo
     * @param size
     * @return
     */
    Page<User> getAllUserPage(int currentPageNo, int size);

    /**
     * 模糊查询获取User分页信息
     * @param currentPageNo
     * @param size
     * @param selectValue
     * @return
     */
    Page<User> getUserPageByWrapper(int currentPageNo, int size,String selectValue);

    /**
     * 修改用户信息
     * @param user
     * @return
     */
    Boolean updateUserById(User user);

    /**
     * 添加用户信息
     * @param loginName
     * @param password
     * @param name
     * @param email
     * @param mobile
     * @return
     */
    Boolean addUser(String loginName,String password, String name,String email,String mobile);

    /**
     * 添加用户信息 从register copy来的
     * @param user
     * @param multipartFile
     * @return
     */
    boolean addUser(User user,MultipartFile multipartFile);

    /**
     * 回显用户信息
     * @param userId
     * @return
     */
    User showUserById(String userId);

    /**
     * 逻辑删除
     * @param userId
     * @return
     */
    Boolean deleteUserById(String userId);

    /**
     * 修改账号密码
     *
     * @param loginName
     * @param password
     * @return
     */
    boolean updateLoginNameAndPwd(String loginName,String password);


    /** 根据不同职位，查出不同的user
     * @param roleId 职位id
     * @return
     */
    List<User> findByRoleId(String roleId);
}
